/// 菜单动作的强类型定义。
///
/// 避免在业务层直接依赖字符串常量，统一入口。
enum MenuAction {
  /// 新建工程
  newProject,

  /// 打开工程
  openProject,

  /// 关闭工程
  closeProject,

  /// 运行工程
  runProject,

  /// 调试工程
  debugProject,
}

/// 将菜单栏回调中传递的 [raw] 消息解析为 [MenuAction] 枚举。
///
/// - 入参可以是：
///   - 已经是 [MenuAction] 的枚举值（直接返回）；
///   - 传统的字符串消息（"Run"、"Open"、"关闭" 等）；
///   - 扩展字符串，形如 `"new|name=xxx"`，仅取 `|` 前的部分作判断；
/// - 未能识别时返回 `null`。
MenuAction? parseMenuAction(dynamic raw) {
  if (raw is MenuAction) return raw; // 已经是枚举，直接返回
  if (raw == null) return null;

  final s = raw.toString().trim().toLowerCase();

  switch (s) {
    case 'new':
    case 'new project':
    case '新建':
      return MenuAction.newProject;

    case 'open':
    case 'open project':
    case '打开':
      return MenuAction.openProject;

    case 'close':
    case 'close project':
    case '关闭':
      return MenuAction.closeProject;

    case 'run':
    case 'run project':
    case '运行':
      return MenuAction.runProject;

    case 'debug':
    case 'run debug':
    case '调试':
      return MenuAction.debugProject;

    default:
    // 扩展字符串：形如 "new|..."，只取第一个分段
      final head = s.split('|').first;
      switch (head) {
        case 'new':
          return MenuAction.newProject;
        case 'open':
          return MenuAction.openProject;
        case 'close':
          return MenuAction.closeProject;
        case 'run':
          return MenuAction.runProject;
        case 'debug':
          return MenuAction.debugProject;
      }
      return null;
  }
}
